package DP.singleton;

import java.util.ArrayList;
import java.util.Random;

/**
 * @author msi
 * 线程不安全的实现方式：如果需要实现线程安全可以通过加锁操作实现。
 * 这仅仅只是一个demo，观察其中的实现思想即可。
 */
public class Singleton2 {
    //定义最多能产生的实例数量
    private static int maxNumOfSingleton2 = 2;
    //每个对象都有自己的名字，使用arraylist容纳。
    private static ArrayList<String> nameList = new ArrayList<>();
    //定义一个列表，容纳所有的Singleton2实例
    private static ArrayList<Singleton2> singleton2ArrayList=new ArrayList<>();
    //当前实例序号：这个实现是线程不安全的。
    private static int countNumOfSingleton2 =0;
    //产生所有的对象
    static {
        for (int i=0;i<maxNumOfSingleton2;i++){
            singleton2ArrayList.add(new Singleton2());
        }
    }
    private Singleton2(){

    }
    private Singleton2(String name){
        nameList.add(name);
    }
    //随机获得一个实例对象
    public static Singleton2 getInstance(){
        Random random=new Random();
        countNumOfSingleton2 = random.nextInt(maxNumOfSingleton2);
        return singleton2ArrayList.get(countNumOfSingleton2);
    }

    public static void say(){
        System.out.println(nameList.get(countNumOfSingleton2));
    }
}
